#include <iostream>
using namespace std;

//class Person
//{
//public:
//	virtual void func(int val = 1)
//	{
//		cout << "A->" << val << endl;
//	}
//	virtual void test()
//	{
//		func();
//	}
//};
//
//class Son:public Person
//{
//public:
//	virtual void func(int val = 0)
//	{
//		cout << "B->" << val << endl;
//	}
//};
//
//int main(int argc, char* argv[])
//{
//	Person* p1 = new Person;
//	p1->test();
//	p1->func();
//	Person p2;
//	p2.func();
//	p2.test();
//	Son* p3 = new Son;
//	p3->func();
//	p3->test();
//	Son p4;
//	p4.func();
//	p4.test();
//	return 0;
//}

//class Base
//{
//public:
//	virtual void Func()
//	{
//		cout << "Base::Func()" << endl;
//	}
//	virtual void func()
//	{
//		cout << "Base::func()" << endl;
//	}
//	void func2()
//	{
//		cout << "Base::func2()" << endl;
//	}
//private:
//	int _a;
//	char _b;
//};
//
//class Derive :public Base
//{
//public:
//	virtual void Func()
//	{
//		cout << "Derive::Func()" << endl;
//	}
//private:
//	int _c;
//};
//
//int main()
//{
//	cout << sizeof(Base) << endl;
//	cout << sizeof(Derive) << endl;
//	return 0;
//}
//
//int main() {
//    int num;
//    cin >> num;
//    int i = 0;
//    int p = 0;
//    int my_max = 0;
//    while (i < 32)
//    {
//        if ((num >> i) & 1)
//        {
//            p++;
//            if (p > my_max)
//            {
//                my_max = p;
//            }
//        }
//        else
//        {
//            p = 0;
//        }
//        i++;
//    }
//    cout << my_max << endl;
//    return 0;
//}

class LCA {
public:
    int All_LCA(int &a, int &b, int n)
    {
        if (n > a && n > b)
        {
            return 0;
        }
        if (n == a)
        {
            return a;
        }
        else if (n == b)
        {
            return b;
        }
        else if (n * 2 == a && b == a + 1)
        {
            return n;
        }
        else if (n * 2 == b && a == b + 1)
        {
            return n;
        }
        else if (n == a && All_LCA(a, b, n * 2))
        {
            return a;
        }
        else if (n == b && All_LCA(a, b, n * 2))
        {
            return b;
        }
        return All_LCA(a, b, n * 2) || All_LCA(a, b, n * 2 + 1);
    }

    int getLCA(int &a, int &b) {
        // write code here
        int n = 1;
        return All_LCA(a, b, n);
    }
};

int main()
{
    LCA L;
    int a, b;
    while (cin >> a >> b)
    {
        cout << L.getLCA(a, b) << endl;
    }
    return 0;
}


class LCA {
public:
    int ret = 0;
    int All_LCA(int& a, int& b, int n)
    {
        if (n > a && n > b)
        {
            return 0;
        }
        int left = All_LCA(a, b, n * 2);
        int right = All_LCA(a, b, n * 2 + 1);
        if (n == a || n == b)
        {
            return n;
        }
        if (left && right)
        {
            return n;
        }
        if (left)
        {
            return left;
        }
        if (right)
        {
            return right;
        }
        return 0;
    }
    int getLCA(int& a, int& b) {
        // write code here
        return All_LCA(a, b, 1);
    }
};
